Docker上のGowin EDAでLチカ
Docker上のGowin EDAを使って、Tang Primer 20KをLチカしてみる。
Gowin EDAを起動
事前に XQuartz を起動しておき、Gowin EDAを起動する。
code:sh
$ cd tangprimer20k-samples/
$ docker run -it --rm -v pwd:/root -e DISPLAY=host.docker.internal:0 -v ~/.Xauthority:/root/.Xauthority gowin-eda gw_ide
プロジェクトを作成
File > New から新規のFPGA Design Projectを作成。
Project Name
Blink
Select Deivce
GW2A-LV18PG256C8/I7 を選択
System Verilog を使うように設定
プロジェクトの設定を開き、Verilog Language に「System Verilog 2017」を設定
https://gyazo.com/a2b5827d27ec9e94b5280deacfbb9635
Verilog の記述
Verilog ファイルを新規作成する。
code:src/top.sv
module top(
input wire clk,
);
assign led = 6'b101010;
endmodule
上記コードを書いたら、合成を実行する
https://gyazo.com/08b69d9ac90703e40fd8e92549c5fec8
物理制約ファイルの記述
code:src/Blink.cst
IO_LOC "clk" H11;
IO_PORT "clk" IO_TYPE=LVCMOS18 PULL_MODE=UP BANK_VCCIO=1.8;
IO_PORT "led0" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led1" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led2" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led3" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led4" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led5" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; 合わせて、LED0とLED1を使用するため、以下の設定を行っておく
https://gyazo.com/3c7e4882da9ad7ba2de1c885d208012d
配置と配線
https://gyazo.com/3c7a601df6e964bebab5ea8d854b2277
書き込み
配線と配置を終えるとビットストリームが作成されるので、macOSから書き込みを行う。
code:sh
openFPGALoader -b tangprimer20k Blink/impl/pnr/Blink.fs
ボタンも使ってみる
code:src/top.sv
module top(
input wire clk,
input wire 4:0 btn_n, // ボタンはネガティブロジック output wire 5:0 led_n // LEDはネガティブロジック );
assign led_n = { 1'b1, btn_n };
endmodule
code:src/Blink.cst
//Copyright (C)2014-2024 Gowin Semiconductor Corporation.
//All rights reserved.
//File Title: Physical Constraints file
//Tool Version: V1.9.10.03 Education
//Part Number: GW2A-LV18PG256C8/I7
//Device: GW2A-18
//Device Version: C
//Created Time: Fri 01 24 12:35:12 2025
IO_LOC "clk" H11;
IO_PORT "clk" IO_TYPE=LVCMOS18 PULL_MODE=UP BANK_VCCIO=1.8;
IO_PORT "led_n0" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led_n1" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led_n2" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led_n3" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led_n4" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "led_n5" IO_TYPE=LVCMOS18 PULL_MODE=UP DRIVE=8 BANK_VCCIO=1.8; IO_PORT "btn_n0" IO_TYPE=LVCMOS33; IO_PORT "btn_n1" IO_TYPE=LVCMOS15; IO_PORT "btn_n2" IO_TYPE=LVCMOS15; IO_PORT "btn_n3" IO_TYPE=LVCMOS15; IO_PORT "btn_n4" IO_TYPE=LVCMOS15; 参考
【FPGA】Tang Primer 20KでLチカ
tang Nano 9Kで開発を始めるためのメモ
gw_sh のサンプル